package com.example.softwareconfigurationcoursedesign.ShopPage;

import com.example.softwareconfigurationcoursedesign.Admin.ProductServiceImplement;

import java.sql.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ProductService implements ProductServiceImplement {
    @Override
    public List<Product> getProductListFromDatabase() {
        // 连接数据库，执行查询操作，获取产品列表数据
        // 假设使用JDBC来访问数据库

        // 假设数据库表名为products，包含id、name、price、imageUrl等字段
        String sql = "SELECT pid, pname, pprice, ptag, pstock, url, id, product_detail FROM products";

        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/course_design", "root", "123456"); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) {

            List<Product> productList = new ArrayList<>();

            // 遍历结果集，将每条记录转换为Product对象并添加到列表中
            while (resultSet.next()) {
                String pid = resultSet.getString("pid");  // 获取产品ID
                String pname = resultSet.getString("pname");  // 获取产品名称
                double pprice = resultSet.getDouble("pprice");  // 获取产品价格
                String ptag = resultSet.getString("ptag");  // 获取产品标签
                String pst = resultSet.getString("pstock");  // 获取产品库存
                String purl = resultSet.getString("url");  // 获取产品图片URL
                String detail = resultSet.getString("product_detail");  // 获取产品详情
                int id = resultSet.getInt("id");  // 获取产品ID
                Product product = new Product(pid, pname, pprice, ptag, purl, id, detail);
                productList.add(product);
            }

            return productList;

        } catch (SQLException e) {
            // 输出异常信息
            e.printStackTrace(System.err);
        }

        // 查询出现异常时返回空列表
        return Collections.emptyList();
    }

    @Override
    public void addProduct(int pStock, String pid, String productName, double productPrice, String productTag, String productDetail, String productUrl) {
        // 连接数据库，执行插入操作，将新商品信息添加到数据库
        // 假设使用JDBC来访问数据库

        String sql = "INSERT INTO products (pname, pprice, ptag, Product_detail, url, pid, pstock) VALUES (?, ?, ?, ?, ?, ?, ?)";

        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/course_design", "root", "123456"); PreparedStatement statement = connection.prepareStatement(sql)) {
            statement.setString(1, productName);  // 设置产品名称
            statement.setDouble(2, productPrice);  // 设置产品价格
            statement.setString(3, productTag);  // 设置产品标签
            statement.setString(4, productDetail);  // 设置产品详情
            statement.setString(5, productUrl);  // 设置产品图片URL
            statement.setString(6, pid);  // 设置产品ID
            statement.setInt(7, pStock);  // 设置产品库存
            statement.executeUpdate();  // 执行插入操作
            System.out.println("增加商品");
        } catch (SQLException e) {
            e.printStackTrace(System.err);
        }
    }

    @Override
    public void editProduct(int productId, String productName, double productPrice, String productTag, String productDetail, String purl) {
        // 连接数据库，执行更新操作，将商品信息更新到数据库
        // 假设使用JDBC来访问数据库

        String sql = "UPDATE products SET pname = ?, pprice = ?, ptag = ?, product_detail = ? WHERE id = ?";

        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/course_design", "root", "123456"); PreparedStatement statement = connection.prepareStatement(sql)) {

            statement.setString(1, productName);  // 设置产品名称
            statement.setDouble(2, productPrice);  // 设置产品价格
            statement.setString(3, productTag);  // 设置产品标签
            statement.setString(4, productDetail);  // 设置产品详情
            statement.setInt(5, productId);  // 设置产品ID

            statement.executeUpdate();  // 执行更新操作
            System.out.println("编辑商品");
        } catch (SQLException e) {
            e.printStackTrace(System.err);
        }
    }
    @Override
    public void deleteProduct(int productId) {
        // 连接数据库，执行删除操作，将指定商品从数据库中删除
        // 假设使用JDBC来访问数据库

        String sql = "DELETE FROM products WHERE id = ?"; // SQL语句，删除指定id的商品

        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/course_design", "root", "123456"); PreparedStatement statement = connection.prepareStatement(sql)) {

            statement.setInt(1, productId); // 绑定参数，设置要删除的商品id

            statement.executeUpdate(); // 执行删除操作
            System.out.println("删除商品"); // 打印删除成功的消息
        } catch (SQLException e) {
            e.printStackTrace(System.err); // 打印异常信息
        }
    }


    // 根据搜索关键字查找匹配的商品
    @Override
    public List<Product> searchProduct(String searchKeyword) {
        // 连接数据库，执行查询操作，根据搜索关键字查找匹配的商品
        // 假设使用JDBC来访问数据库

        String sql = "SELECT * FROM products WHERE pname LIKE ?"; // SQL语句，根据商品名模糊查询商品信息

        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/course_design", "root", "123456"); PreparedStatement statement = connection.prepareStatement(sql)) {

            statement.setString(1, "%" + searchKeyword + "%"); // 绑定参数，设置模糊查询的关键字
            ResultSet resultSet = statement.executeQuery(); // 执行查询操作

            List<Product> searchResults = new ArrayList<>();

            while (resultSet.next()) {
                // 从结果集中获取商品信息
                String pid = resultSet.getString("pid");
                String pname = resultSet.getString("pname");
                double pprice = resultSet.getDouble("pprice");
                String ptag = resultSet.getString("ptag");
                String productDetail = resultSet.getString("product_detail");
                String purl = resultSet.getString("url");
                int id = resultSet.getInt("id");
                Product product = new Product(pid, pname, pprice, ptag, purl, id, productDetail);
                searchResults.add(product); // 将匹配的商品加入列表
                System.err.println(pname); // 打印匹配的商品名
                System.out.println("查找商品"); // 打印查找成功的消息
            }
            return searchResults; // 返回匹配的商品列表
        } catch (SQLException e) {
            e.printStackTrace(System.err); // 打印异常信息
        }

        return Collections.emptyList(); // 若发生异常，返回空列表
    }// 从数据库中获取购物车商品列表的方法

    @Override
    public List<Product> getProductListCarFromDatabase(String pname) {
        String sql = "SELECT pid, pprice, ptag, pstock, url, id, product_detail FROM products WHERE pname=?"; // SQL语句，根据商品名查询购物车商品信息

        try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/course_design", "root", "123456"); PreparedStatement statement = connection.prepareStatement(sql)) {

            statement.setString(1, pname); // 绑定参数，设置要查询的商品名

            try (ResultSet resultSet = statement.executeQuery()) {
                List<Product> productList = new ArrayList<>();

                while (resultSet.next()) {
                    // 从结果集中获取购物车商品信息
                    String pid = resultSet.getString("pid");
                    double pprice = resultSet.getDouble("pprice");
                    String ptag = resultSet.getString("ptag");
                    String pst = resultSet.getString("pstock");
                    String purl = resultSet.getString("url");
                    String detail = resultSet.getString("product_detail");
                    int id = resultSet.getInt("id");
                    Product product = new Product(pid, pname, pprice, ptag, purl, id, detail);
                    productList.add(product); // 将购物车商品加入列表
                }

                return productList; // 返回购物车商品列表
            }
        } catch (SQLException e) {
            e.printStackTrace(System.err); // 打印异常信息
        }

        return Collections.emptyList(); // 若发生异常，返回空列表
    }
}

